import { reqAttr, reqDelDataAttr } from '@/API/product/attr/index.js'
import { Attr } from '@/API/product/attr/type.js'
import useAttrStore from '@/store/modules/useAttr.js'
import { ElMessage, ElMessageBox } from 'element-plus'

export default (ClearAttrParamsData, scene, attrParams, attrArr) => {
  const AttrStore = useAttrStore()
  const getAttr = async () => {
    const { c1ID, c2ID, c3ID } = AttrStore
    const result = await reqAttr(c1ID, c2ID, c3ID)

    console.log('我们返回的值是:', result)
    if (result.code == 200) {
      attrArr.value = result.data
    }
  }
  const updataAttr = (row: Attr) => {
    /*
    JSON.parse(JSON.stringify(row))把对象转换成 JSON 字符串，简单数据类型存储到了栈中，然后再将 JSON 字符串转换成对象，重新在堆中开辟空间存储，不会影响原对象数据
    如果我们单纯的赋值, 会导致浅拷贝的状况出现, 我们的数据出现显示错误, 这是因为浅拷贝的内存地址指向的都是一个, 当我们修改attrParams中的数据时,
    相应被浅拷贝的数据的原数据也会被修改.从而导致, 我们没有获取服务器数据, 但是我们在页面UI中依旧显示了错误的数据.
    !业务运用中的非常重要的一点,数据即是一切!
    */
    attrParams.value = JSON.parse(JSON.stringify(row))
    scene.value = 1
  }
  const DelAttr = async (row: Attr) => {
    ElMessageBox.confirm('是否确定删除该属性', '删除', {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning'
    })
      .then(async () => {
        const result = await reqDelDataAttr(row.id)
        ElMessage({
          type: 'success',
          message: '删除中'
        })
        if (result.code == 200) {
          ElMessage({ type: 'success', message: '删除成功' })
        } else {
          ElMessage({ type: 'error', message: '删除失败' })
        }
        getAttr()
      })
      .catch(() => {
        ElMessage({
          type: 'info',
          message: '取消删除'
        })
      })
  }
  /* 添加属性按钮 */
  const addAttr = () => {
    /* 点击按钮时情况数据,防止我们添加后,上一次的数据还存在. */
    ClearAttrParamsData()
    scene.value = 1
  }

  return { getAttr, updataAttr, DelAttr, addAttr }
}
